[t:/]$ 지식_

STM320에서 이미지 버전관리

2009/07/23

개요

펌웨어 업데이트등 버전관리를 외부 툴의 도움없이 버전넘버를 자동 패키징하고 펌웨어 업데이터(부트로더 등)에서 볼 수 있게 하는 방법.

배경

링크 스크립트를 조작하여 특정 위치에 상수를 박고자 했으나. 잘 안 됐다.

그래서 어떻게?

걍 쉽게 야메로 가보자.
stm32f10x_vector.c 를 까고.

__vector_table 배열의 마지막에 상수를 추가.

예를 들면.

const intvec_elem vector_table[] =
{
    { .ptr = __sfe( CSTACK ) },
    __iar_program_start,

    .
    .
    .
    DMA2_Channel1_IRQHandler,
    DMA2_Channel2_IRQHandler,
    DMA2_Channel3_IRQHandler,
    DMA2_Channel4_5_IRQHandler,
    (void(*)(void))BUILD_DATE,
    (void(*)(void))BUILD_TIME,
    (void(*)(void))BUILD_NO,
    (void(*)(void))BBB_VER,
};

인터럽트 벡터 테이블이므로 항상 고정된 장소에 픽스되어 박힌다.
BUILD_DATE, BUILD_TIME, BUILD_NO, BBB_VER, 상수 값은 이미지 바이너리의 항상 동일한 지정된 위치에 있다.

STM320 표준 벡터테이블 및 메모리맵을 쓴다면, 0x8000130 부터 위의 상수값들이 존재하게 된다.

이제 펌웨어 업데이터, 부트로더 등에서 저 위치의 값을 포인터 찍어서 읽어보면 된다. 마찬가지로 업데이트 할 신규 파일을 읽은 후 0x130 옵셋 위치의 값을 가져와서 버전 체킹을 하면 된다.





공유하기













[t:/] is not "technology - root". dawnsea, rss